#include "BigNumber.h"
#pragma once
#define BIGINTEGERREX "[-+][1-9][0-9]*|[0-9]+";

class big_integer: public big_number
{
private:
		void init( string);
public:
		big_integer(void);
		big_integer( string);
		big_integer(char);
		big_integer(short);
		big_integer(int);
		big_integer(long);
		big_integer(long long);
		big_integer(unsigned char);
		big_integer(unsigned short);
		big_integer(unsigned int);
		big_integer(unsigned long);
		big_integer(unsigned long long);
		big_integer(float);
		big_integer(double);
		big_integer(long double);
		big_integer(const big_integer&);
        ~big_integer(void);		

		big_number toBigNumber();
		inline big_integer operator % ( int param){return *this%big_integer(param);}
		inline big_integer operator % ( short param){return *this%big_integer(param);}
		inline big_integer operator % ( long param){return *this%big_integer(param);}
		inline big_integer operator % ( long long param){return *this%big_integer(param);}
		inline big_integer operator % (unsigned int param){return *this%big_integer(param);}
		inline big_integer operator % (unsigned short param){return *this%big_integer(param);}
		inline big_integer operator % (unsigned long param){return *this%big_integer(param);}
		inline big_integer operator % (unsigned long long param){return *this%big_integer(param);}
		big_integer operator % (const big_integer &);
			
 };

        inline big_integer operator % ( int param,big_integer bi){return bi%big_integer(param);}
		inline big_integer operator % ( short param,big_integer bi){return bi%big_integer(param);}
		inline big_integer operator % ( long param,big_integer bi){return bi%big_integer(param);}
		inline big_integer operator % ( long long param,big_integer bi){return bi%big_integer(param);}
		inline big_integer operator % (unsigned int param,big_integer bi){return bi%big_integer(param);}
		inline big_integer operator % (unsigned short param,big_integer bi){return bi%big_integer(param);}
		inline big_integer operator % (unsigned long param,big_integer bi){return bi%big_integer(param);}
		inline big_integer operator % (unsigned long long param,big_integer bi){return bi%big_integer(param);}

